package com.zilu.digitaltwin.dao.mapper;

import com.zilu.digitaltwin.dto.req.CatalogDictQuery;
import com.zilu.digitaltwin.entity.CatalogConfigInfoBO;
import com.zilu.digitaltwin.entity.dto.CatalogConfigDictInfoDTO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Set;

/**
 * @author :caijianbao
 * @date : 2023/1/4 21:45
 */
@Repository
public interface CatalogConfigInfoMapper {

    /**
     * 通过id获取目录对应的配置信息
     *
     * @param id
     * @return
     */
    CatalogConfigInfoBO getCatalogInfoById(@Param("id") Long id);

    /**
     * 目录配置信息更新 by id
     *
     * @param catalogConfigInfoBO
     * @return
     */
    Boolean updateInfoById(CatalogConfigInfoBO catalogConfigInfoBO);

    /**
     * 根据层级code和属性类型获取对应的属性列表
     *
     * @param catalogCode
     * @param type
     * @return
     */
    List<CatalogConfigInfoBO> listCatalogInfo(@Param("catalogCode") String catalogCode, @Param("type") String type);


    /**
     * 获取生效的目录属性
     *  实体属性  是否生效
     *  数值或者类型属性  他们在过滤器中是否生效
     *
     * @param catalogCodes  目录的code
     * @param codes   对应的属性配置的code集合
     * @param types   对应的属性类型的集合
     * @return
     */
    List<CatalogConfigInfoBO> listEffectiveCatalogInfo(@Param("catalogCodes") List<String> catalogCodes,
                                                       @Param("codes") List<String> codes,
                                                       @Param("types") List<String> types);

    /**
     * 获取具体的目录属性
     *
     * @param codes
     * @param type
     * @return
     */
    List<CatalogConfigInfoBO> listByCodes(@Param("codes") List<String> codes, @Param("type") String type);

    /**
     * 获取dict信息通过属性code、dictId等
     *
     * @param catalogDictQuery
     * @return
     */
    List<CatalogConfigDictInfoDTO> listDictByCodes(CatalogDictQuery catalogDictQuery);

    /**
     * 判断codes里面是否包含建筑物的
     *
     * @param codes
     * @return
     */
    Integer includeBuildingCode(@Param("codes") List<String> codes);


    /**
     * 根据名字查询列表
     * @param names
     * @return
     */
    List<CatalogConfigInfoBO> listByNames(@Param("names") Set<String> names);
}
